package com.douma.practical_3.external_sort;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 抖码课堂，专注中国程序员基础内功修炼
 * 官网：douma-tech.com
 * 公众号：资深程序员老汤
 *
 * @作者 : 老汤
 */
public class _2_LittleFileSorter {
    public void sortEachFile(String dirName) throws IOException {
        File dir = new File(dirName);
        File[] littleFiles = dir.listFiles();

        // 排序每一个小文件中的整数
        for (int i = 0; i < littleFiles.length; i++) {
            // 1. 将当前小文件中整数读取到内存中
            BufferedReader br = FileIOUtils.getReader(littleFiles[i].getAbsolutePath());
            List<Integer> nums = new ArrayList<>();
            String line = null;
            while ((line = br.readLine()) != null) {
                nums.add(Integer.valueOf(line));
            }

            FileIOUtils.closeReader(br);

            // 2. 对当前文件中的所有整数进行排序
            Collections.sort(nums);

            // 3. 将排完序的整数写到目标文件中
            BufferedWriter bw = FileIOUtils.getWriter("data\\sort\\sorted_data\\" + i);
            for (Integer num : nums) {
                bw.write(String.valueOf(num));
                bw.newLine();
            }
            FileIOUtils.closeWriter(bw);

            // 将数据清除掉
            nums.clear();
        }
    }

    public static void main(String[] args) throws IOException {
        String dir = "data\\sort\\raw_data";
        new _2_LittleFileSorter().sortEachFile(dir);
    }
}
